#pragma once
#include <mysql/mysql.h>
#include <cstdio>
#include <iostream>
#include <string>
const static std::string USERNAME = "debian-sys-maint";
const static std::string PASSWORD = "XDqpn2XgxBf6xDfB";
const static std::string db = "mytest1";
class mysql_use
{
public:
    mysql_use()
    {
        _mysql = mysql_init(nullptr);
        if (_mysql == nullptr)
        {
            std::cerr << "init mysql error!" << std::endl;
            exit(-1);
        }
    }
    void SetCharSet(const std::string &str)
    {
        mysql_set_character_set(_mysql, str.c_str());
    }
    bool Connect()
    {
        if (mysql_real_connect(_mysql, "127.0.0.1", USERNAME.c_str(), PASSWORD.c_str(), db.c_str(), 0, nullptr, 0) == nullptr)
        {
            return false;
        }
        return true;
    }
    bool Add(const std::string &sql)
    {
        int n = mysql_query(_mysql, sql.c_str());
        if (n < 0)
        {
            return false;
        }
        return true;
    }
    bool Modify(const std::string &sql)
    {
        int n = mysql_query(_mysql, sql.c_str());
        if (n < 0)
        {
            return false;
        }
        return true;
    }
    bool Del(const std::string &sql)
    {
        int n = mysql_query(_mysql, sql.c_str());
        if (n < 0)
        {
            return false;
        }
        return true;
    }
    bool Get(const std::string &sql)
    {
        int n = mysql_query(_mysql, sql.c_str());
        if (n < 0)
        {
            std::cout << "query failed! because = " << mysql_error(_mysql) << std::endl;
            return false;
        }
        // 结果保存到本地
        MYSQL_RES *res = mysql_store_result(_mysql);
        if (res == nullptr)
        {
            std::cout << "store data to local failed! because = " << mysql_error(_mysql) << std::endl;
            return false;
        }
        //获得结果集列
        int mysql_set_row = mysql_num_rows(res);
        //获得结果集行
        int mysql_set_col = mysql_num_fields(res);
        for(int i = 0;i<mysql_set_row;i++)
        {
            MYSQL_ROW row = mysql_fetch_row(res);
            for(int j = 0;j<mysql_set_col;j++)
            {
                std::cout<<row[j]<<"\t";
            }
            std::cout<<std::endl;
        }
        //释放资源
        mysql_free_result(res);
        return true;
    }
    ~mysql_use()
    {
        mysql_close(_mysql);
    }

private:
    MYSQL *_mysql = nullptr;
};
